﻿$(document).resize(function () {
    $('#treeA').jqxTree({ height: CurrentHeigth() });
    $('#treeB').jqxTree({ height: CurrentHeigth() });
});
//$(document).ready(function () {
    //затычка в виде полного обнавления деревьев
    function rebuildTree() {
        //загрузка дерева доступных машинах
        $.ajax({
            url: "/data/detailscar", dataType: "json", type: 'get',
            cache:false,
            contentType: 'application/json; charset=UTF-8'
        }).done(function (data) {
            for (var key in data) {
                var curElem = data[key];
                curElem.Name = '<img class=\'' + curElem.Class + '\' /><span>' + curElem.Name + '</span>';
            }
            bindArrayToTree('#treeA', data);
        });
        $.ajax({
            url: "/data/UserTreeManager", dataType: "json", type: 'get',
            contentType: 'application/json; charset=UTF-8'
        }).done(function (data) {
            items = data;
            for (var key in data) {
                var curElem = data[key];
                curElem.Name = '<img class=\'' + curElem.Class + '\' /><span>' + curElem.Name + '</span>';
            }
            bindArrayToTree('#treeB', data);
        });
    }

    //дерево пользователя
    $('#treeA').jqxTree({
        allowDrag: true,
        allowDrop: true,
        height: CurrentHeigth(),
        width: '49.5%',
        theme: theme,
        dragEnd: function (item, dropItem) {		                        //внутреннее перетаскивание
            //alert(item.id + '  -  ' + dropItem.id);
            if (dropItem == null)
                return true;
            var parentItem = $('#treeA').jqxTree('getItem', item.element).parentElement;
            if (parentItem == null) {
                parentItem = new Object();
                parentItem.id = 'tree_-1';
            }

            if (dropItem.id.toString().indexOf("tree_") == -1)				//если отпустили курсор на точке учета
                return false;												//отмена при попытке вставить в точку учета
            $.ajax({
                url: "/data/UserTreeManager?id=" + item.id,
                data: JSON.stringify({ PointId: parentItem.id, MasterId: dropItem.id }),
                dataType: "json", type: 'PUT',
                contentType: 'application/json; charset=UTF-8'
            }).done(function () {//если запрос успешно прошел
                rebuildTree();
            });

            return false;
        }
    });

    //дерево-список доступных точек
    $('#treeB').jqxTree({
        allowDrag: true,
        allowDrop: false,
        height: $(window).height() - 130,
        width: '49.5%',
        theme: theme,
        dragEnd: function (item, dropItem) {
            if (dropItem != null && dropItem.id != null && dropItem.id.toString().indexOf("tree_") != -1 && item != null && item.id != null && item.id != 'else' && dropItem.id.toString() != '') {      //если не точка учета (т.е. узел)
                var needAdd = true;
                if (dropItem.subtreeElement != null) {
                    for (var key in dropItem.subtreeElement.children) {
                        if (dropItem.subtreeElement.children[key] != null && dropItem.subtreeElement.children[key].id == item.id) {
                            needAdd = false;
                            break;
                        }
                    }
                }
                if (needAdd) {
                    $.ajax({
                        url: "/data/UserTreeManager",
                        data: JSON.stringify({ PointId: item.id, MasterId: dropItem.id }),
                        dataType: "json", type: 'POST',
                        contentType: 'application/json; charset=UTF-8'
                    }).done(function () {//если запрос успешно прошел
                        rebuildTree();
                        //var firstItemElement = dropItem.element; 
                        //$('#treeB').jqxTree('addTo', item, firstItemElement);	//вставка в группу точек
                    });
                }
            }
            return false;											//элемент возвращается назад						
        }
    });

    $('#addNewGroupWindow').jqxWindow({
        width: '220', height: '100', resizable: false,
        isModal: true, autoOpen: false, theme: theme,
        cancelButton: $('#cancelButton'),
        okButton: $('#okButton')
    });
    
    $("#itemName").jqxInput({
        placeHolder: "Краткое название", height: 25, width: '100%',
        minLength: 1, theme: theme
    });
    $("#cancelButton").jqxButton({ width: '100', theme: theme });
    $("#okButton").jqxButton({ width: '100', theme: theme });
    $("#okButton").on('click', function () {
        var model = new Object();
        model.Label = $('#itemName').val();
        if (model.Label) {
            var selectedItem = $('#treeA').jqxTree('selectedItem');
            if (selectedItem != null) {
                model.MasterId = selectedItem.parentId;
                if (model.MasterId == 0) {
                    model.MasterId = "tree_-1";
                }
            }else {
                model.MasterId = "tree_-1";
            }
            $.ajax({
                url: "/data/UserTreeManager",
                data: JSON.stringify(model),
                dataType: "json",
                type: 'POST',
                contentType: 'application/json; charset=UTF-8'
            }).done(function () {
                rebuildTree();
            });
        }
        $('#itemName').val('');
    });

    //биндинг меню
    $("#contextMenu").bind('itemclick', function (event) {
        var item = $(event.args).attr("name");
        var selectedItem = $('#treeA').jqxTree('selectedItem');
        var parentItem = new Object();
        parentItem.id = selectedItem.parentId;
        if (parentItem.id == 0) {
            parentItem.id = 'tree_-1';
        }

        switch (item) {
            case "AddItem":
                $('#addNewGroupWindow').jqxWindow('open');
                break;
            case "RemoveItem":
                $.ajax({
                    url: "/data/UserTreeManager?id=" + selectedItem.id + "&parentId=" + parentItem.id, dataType: "json", type: 'DELETE',
                    contentType: 'application/json; charset=UTF-8'
                }).done(function () {
                    rebuildTree();
                });
                break;
        }
    });
    $("#mainContextMenu").bind('itemclick', function (event) {
        $('#addNewGroupWindow').jqxWindow('open');
    });


    // disable the default browser's context menu.
    $('#treeA').bind('contextmenu', function (e) {
        if ($(e.target).parents('.jqx-tree').length > 0) {
            return false;
        }
        return true;
    });

    //Create context menu
    var contextMenu = $("#contextMenu").jqxMenu({
        theme:theme,
        width: '120px',
        height: '57px',
        autoOpenPopup: false,
        mode: 'popup'
    });
    // open the context menu when the user presses the mouse right button.
    $("#treeA li").live('mousedown', function (event) {
        var target = $(event.target).parents('li:first')[0];

        var rightClick = isRightClick(event);
        if (rightClick && target != null) {
            $("#treeA").jqxTree('selectItem', target);
            var scrollTop = $(window).scrollTop();
            var scrollLeft = $(window).scrollLeft();
            mainContextMenu.jqxMenu('close');
            contextMenu.jqxMenu('open', parseInt(event.clientX) + 5 + scrollLeft, parseInt(event.clientY) + 5 + scrollTop);
            return false;
        }
    });
    
    $("#paneltreeA").live('mousedown', function (event) {
        
        var rightClick = isRightClick(event);
        if (rightClick) {
            {
                var scrollTop = $(window).scrollTop();
                var scrollLeft = $(window).scrollLeft();
                contextMenu.jqxMenu('close');
                mainContextMenu.jqxMenu('open', parseInt(event.clientX) + 5 + scrollLeft, parseInt(event.clientY) + 5 + scrollTop);
                return false;

            }
        }
    });

    //Create context menu
    var mainContextMenu = $("#mainContextMenu").jqxMenu({
        theme: theme,
        width: '120px',
        height: '30px',
        autoOpenPopup: false,
        mode: 'popup'
    });

    //элементы первоначального дерева доступных машин
    var items;
    //сохраняем как объект все точки учета
    //инициализация поля поиска
    $("#input").jqxInput({
        placeHolder: "Поиск...",
        height: 25,
        width: '99%',
        minLength: 1,
        theme: theme
    });
    //биндим событие по изменению контента
    $('#input').bind('change', function () {
        if (this.value != '') {											//если значение не пустое, то
            var massiv = new Array();										//очищаем массив результатов
            for (var key in items) {									//проходимся по всем элементам массива
                var item = items[key];								//текущий элемент массива
                if (item.Name.indexOf(this.value) > -1) {							//условие соответствия
                    if (item.Id != "else") {
                        massiv.push(item);								//добавляем в результирующий массив
                    }
                }
            }
            if (massiv.length > 0) {
                bindArrayToTree('#treeB', massiv);
            } else {
                $('#treeB').jqxTree('clear');
            }

        } else {
            bindArrayToTree('#treeB', items);
        }

    });

    //загрузка панелей
    rebuildTree();
//});